패키지 매니저 npm, pnpm, yarn 차이
마지막 수정일: 2025. 07. 24.
toss 기술 블로그를 참고한 내용 정리한 내용
패키지 매니저란?
패키지 매니저란 일반적으로 package.json에 dependency를 명시하고 이를 통해 올바른 버전을 설치할 수 있게 해줌
패키지 매니저가 동작하는 세 가지 단계
Resolution
라이브러리와 라이브러리의 다른 의존성 버전을 확인하고 고정하는 단계
이를 yarn.lock이나 package-lock.json에 명시
Fetch
Resolution 단계에서 정해진 버전을 네트워크를 통해(일반적으로 npm을 통해) 파일을 가져옴
Link
resolution과 fetch 단계에서 정해진 버전을 실제로 소스코드에서 import, require하여 사용할 수 있게함.
npm, pnpm, Yarn PnP에서 패키지를 설치하는 방법의 차이
- npm은 그냥 의존성에 다 npm_modules를 추가 및 설치하는 방식
- pnpm은 hard link(symlink라 표현하지만 정확히는) 방식. 시스템 전역에 있는 pnpm-store에 설치하고 node_modules에서 경로를 잡는다. 하지만 여전히 모든 파일에 잡아야해서 느림
- pnp linker는 node_modules를 안 만들고
.pnp.cjs파일에 다 적어둠..yarn/cache에 zip 파일로 저장하고 import에서 node가 아닌 yarn이 런타임에 매핑하는 방식. 설치를 안 해도 돼서 가장 빠르긴 하지만 node_modules가 없기 때문에 이를 필요로하는 환경에선 오류가 많이 남 + 설정 많이 필요
참고 : pnp에서 zero-install이 기본이라고 여기지만 이는 사실이 아님 link 방식과 zero-install은 별개의 개념이지만 pnp는 node_modules가 없기 때문에 파일 크기가 작아서 zero-install로 git에 다 올릴 시 이득이 가장 큰 방식이라 차용하는 것